﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using objetos;
using publico;
using negocios;
using System.Transactions;


namespace softsales.pagina.usuario
{
    public partial class usuario_formulario : System.Web.UI.Page
    {
        OBJ_TB_USUARIO o_tb_usuario = new OBJ_TB_USUARIO();
        BLL_TB_USUARIO b_tb_usuario = new BLL_TB_USUARIO();

        BLL_TB_USUARIO_PERFIL b_tb_usuario_perfil = new BLL_TB_USUARIO_PERFIL();
        BLL_TB_EMPRESA b_tb_empresa = new BLL_TB_EMPRESA();

        BLL_TB_USUARIO_EMPRESA b_tb_usuario_empresa = new BLL_TB_USUARIO_EMPRESA();
        BLL_TB_LOG_ERRO b_tb_log_erro = new BLL_TB_LOG_ERRO();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (PUB_SESSAO.Logado())
            {

                if (!IsPostBack)
                {

                    TXT_DT_CADASTRO.Text = DateTime.Now.ToShortDateString();
                    TXT_DT_EXPIRA_SENHA.Text = DateTime.Now.AddDays(60).ToShortDateString();
                    TXT_DT_CADASTRO.Enabled = false;
                    TXT_DT_EXPIRA_SENHA.Enabled = false;
                    b_tb_usuario_perfil.PreencheControle(DDL_ID_PERFIL, true);
                    b_tb_empresa.PreencheControleWeb(LST_EMPRESA_DISPONIVEL, false);

                    if (Request["id"] != null)
                    {

                        LBL_TITULO_PAGINA.Text = "Editar Usuário";

                        if (PUB_FUNCOES.ApenasInteiro(Request["id"].ToString()))
                        {

                            Editar(Request["id"].ToString());
                        }

                        

                    }
                    else
                    {
                        LBL_TITULO_PAGINA.Text = "Incluir Usuário";
       

                    }

                }


            }

        }

        private void Editar(String id)
        {

            o_tb_usuario = b_tb_usuario.SelecionarObjetoPorId(Convert.ToInt32(id));

            HF_ID.Value = o_tb_usuario.id.ToString();
            TXT_DT_CADASTRO.Text = o_tb_usuario.dt_cadastro.ToString();
            TXT_DT_EXPIRA_SENHA.Text = o_tb_usuario.dt_expira_senha.ToString();
            TXT_EMAIL.Text = o_tb_usuario.email.ToString();
            TXT_LOGIN.Text = o_tb_usuario.login.ToString();
            DDL_ID_PERFIL.SelectedValue = o_tb_usuario.id_perfil.ToString();
            CHK_SIT_ATIVO.Checked = o_tb_usuario.sit_ativo;

            List<OBJ_TB_EMPRESA> lista_empresa = b_tb_empresa.SelecionarLista();

            LST_EMPRESA_SELECIONADA.Items.Clear();
            foreach(OBJ_TB_USUARIO_EMPRESA usuario_empresa in b_tb_usuario_empresa.SelecionarLista(string.Format("tb_usuario_empresa.id_usuario = {0}", o_tb_usuario.id),""))
            {
                LST_EMPRESA_SELECIONADA.Items.Add(new ListItem(lista_empresa.Find((emp)=>emp.id == usuario_empresa.id_empresa).nome.ToString(),usuario_empresa.id.ToString()));
            }

            foreach (ListItem item in LST_EMPRESA_SELECIONADA.Items)
            {
                LST_EMPRESA_DISPONIVEL.Items.Remove(item);
            }

        }

        protected void BTN_SALVAR_Click(object sender, EventArgs e)
        {
            string msg = string.Empty;
            int id_usuario;
       
        
            try
            {

               
                if (TXT_LOGIN.Text != string.Empty && TXT_SENHA.Text != string.Empty)
                {

                    using (TransactionScope scope = new TransactionScope())
                    {
                        o_tb_usuario.id_perfil = Convert.ToInt32(DDL_ID_PERFIL.SelectedValue);
                        o_tb_usuario.login = TXT_LOGIN.Text;
                        o_tb_usuario.sit_ativo = CHK_SIT_ATIVO.Checked;
                        o_tb_usuario.email = TXT_EMAIL.Text;

                        if (HF_ID.Value != string.Empty)
                        {

                            if (TXT_SENHA.Text != string.Empty)
                            {
                                o_tb_usuario.senha = PUB_FUNCOES.CriptografarSenha(TXT_SENHA.Text);
                            }

                            o_tb_usuario.dt_atualizacao = DateTime.Now;
                            o_tb_usuario.id = Convert.ToInt32(HF_ID.Value);
                            b_tb_usuario.Alterar(o_tb_usuario);

                            id_usuario = o_tb_usuario.id;


                            List<OBJ_TB_USUARIO_EMPRESA> lista_usuario_empresa = b_tb_usuario_empresa.SelecionarLista(string.Format("tb_usuario_empresa.id_usuario = {0}",id_usuario),"");
                            b_tb_usuario_empresa.ExcluirLista(lista_usuario_empresa);

                            foreach (ListItem item in LST_EMPRESA_SELECIONADA.Items)
                            {
                                OBJ_TB_USUARIO_EMPRESA o_tb_usuario_empresa = new OBJ_TB_USUARIO_EMPRESA();

                                o_tb_usuario_empresa.id_empresa = Convert.ToInt32(item.Value);
                                o_tb_usuario_empresa.id_usuario = id_usuario;
                                o_tb_usuario_empresa.sit_ativo = true;
                                o_tb_usuario_empresa.sit_padrao = false;
                                b_tb_usuario_empresa.Incluir(o_tb_usuario_empresa);

                            }

                            msg = PUB_MENSAGEM.MSG_ALTERACAO;

                        }
                        else
                        {
                            o_tb_usuario.senha = PUB_FUNCOES.CriptografarSenha(TXT_SENHA.Text);
                            o_tb_usuario.sit_troca_senha = true;
                            o_tb_usuario.dt_expira_senha = DateTime.Now.AddDays(60);
                            o_tb_usuario.dt_cadastro = DateTime.Now;
                            id_usuario = b_tb_usuario.Incluir(o_tb_usuario);


                         
                            


                            foreach (ListItem item in LST_EMPRESA_SELECIONADA.Items)
                            {
                                OBJ_TB_USUARIO_EMPRESA o_tb_usuario_empresa = new OBJ_TB_USUARIO_EMPRESA();

                                o_tb_usuario_empresa.id_empresa = Convert.ToInt32(item.Value);
                                o_tb_usuario_empresa.id_usuario = id_usuario;
                                o_tb_usuario_empresa.sit_ativo = true;
                                o_tb_usuario_empresa.sit_padrao = false;
                                b_tb_usuario_empresa.Incluir(o_tb_usuario_empresa);
                                 
                            }

                             msg = PUB_MENSAGEM.MSG_INCLUSAO;
                        }

                        Master.MSG_ALERTA(msg, "default.aspx", false);


                        scope.Complete();

                        scope.Dispose();
                    }

                              
                   
                }

            }
            catch (Exception ex)
            {
                b_tb_log_erro.IncluirLogErro(ex);
                Master.MSG_ALERTA("Erro ao tentar salvar o usuário.");
            }
          

        }

        protected void BTN_CANCELAR_Click(object sender, EventArgs e)
        {
            Response.Redirect("default.aspx", false);
        }

        protected void IMG_BTN_ADICIONAR_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                AdicionarItem();
            }
            catch (Exception)
            {
                
                throw;
            }
        }

        protected void IMG_BTN_REMOVER_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                RemoverItem();

            }
            catch (Exception)
            {
                
                throw;
            }
        }

        private void AdicionarItem()
        {
            foreach (ListItem item in LST_EMPRESA_DISPONIVEL.Items)
            {
                if (item.Selected)
                {
                    LST_EMPRESA_SELECIONADA.Items.Add(item);
                }
            }

            foreach (ListItem item in LST_EMPRESA_SELECIONADA.Items)
            {
                LST_EMPRESA_DISPONIVEL.Items.Remove(item);
            }
        }

        private void RemoverItem()
        {
            foreach (ListItem item in LST_EMPRESA_SELECIONADA.Items)
            {
                if (item.Selected)
                {
                    LST_EMPRESA_DISPONIVEL.Items.Add(item);
                }
            }

            foreach (ListItem item in LST_EMPRESA_DISPONIVEL.Items)
            {
                LST_EMPRESA_SELECIONADA.Items.Remove(item);
            }

        }
     


    }
}